home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr48 / cgterm10.zip / PIBASYNC.GLO < prev   
Text File  |  1993-04-01  |  8KB  |  144 lines

  1. (*----------------------------------------------------------------------*)
  2. (*                                                                      *)
  3. (*                  COMMUNICATIONS HARDWARE ADDRESSES                   *)
  4. (*                                                                      *)
  5. (*        These are specific to IBM PCs and close compatibles.          *)
  6. (*                                                                      *)
  7. (*----------------------------------------------------------------------*)
  8.  
  9. CONST
  10.  
  11.    UART_THR = $00;       (* offset from base of UART Registers for IBM PC *)
  12.    UART_RBR = $00;
  13.    UART_IER = $01;
  14.    UART_IIR = $02;
  15.    UART_LCR = $03;
  16.    UART_MCR = $04;
  17.    UART_LSR = $05;
  18.    UART_MSR = $06;
  19.  
  20.    I8088_IMR = $21;      (* port address of the Interrupt Mask Register *)
  21.  
  22.    COM1_Base = $03F8;    (* port addresses for the UART *)
  23.    COM2_Base = $02F8;
  24.    COM3_Base = $03E8;
  25.    COM4_Base = $02E8;
  26.  
  27.    COM1_Irq = 4;         (* Interrupt line for the UART *)
  28.    COM2_Irq = 3;
  29.    COM3_Irq = 4;
  30.    COM4_Irq = 3;
  31.  
  32.    COM1_RS232 = $F8;       (* RS 232 base pointers for UART *)
  33.    COM2_RS232 = $F8;
  34.    COM3_RS232 = $E8;
  35.    COM4_RS232 = $E8;
  36.  
  37.    RS232_Base = $0400    (* Address of RS 232 com port pointer *);
  38.  
  39.    MaxComPorts = 4       (* Four ports allowed by this code    *);
  40.  
  41. CONST
  42.  
  43.    Async_DSeg_Save : INTEGER = 0;  (* Save DS reg in Code Segment for *)
  44.                                    (* interrupt routine               *)
  45.  
  46. (*----------------------------------------------------------------------*)
  47. (*                                                                      *)
  48. (*                   COMMUNICATIONS BUFFER VARIABLES                    *)
  49. (*                                                                      *)
  50. (*     The communications buffers are implemented as circular (ring)    *)
  51. (*     buffers, or double-ended queues.  The asynchronous I/O routines  *)
  52. (*     enter characters in the receive buffer as they arrive at the     *)
  53. (*     serial port.  Higher-level routines may extract characters from  *)
  54. (*     the receive buffer at leisure.  Higher-level routines insert     *)
  55. (*     characters into the send buffer.  The asynchronous I/O routines  *)
  56. (*     then send characters out the serial port when possible.          *)
  57. (*                                                                      *)
  58. (*----------------------------------------------------------------------*)
  59.  
  60. CONST
  61.  
  62.    TimeOut             = 256        (* TimeOut value                   *);
  63.    Async_XON           = ^Q         (* XON character                   *);
  64.    Async_XOFF          = ^S         (* XOFF character                  *);
  65.  
  66.    Async_Overrun_Error = 2          (*   overrun                       *);
  67.    Async_Parity_Error  = 4          (*   parity error                  *);
  68.    Async_Framing_Error = 8          (*   framing error                 *);
  69.    Async_Break_Found   = 16         (*   break interrupt               *);
  70.  
  71.    Async_CTS           = $10        (*   Clear to send                 *);
  72.    Async_DSR           = $20        (*   Data set ready                *);
  73.  
  74. TYPE
  75.    Async_Buffer_Type   = ARRAY[0..1] OF CHAR;
  76.    Async_Ptr           = ^Async_Buffer_Type;
  77.  
  78.  
  79. VAR                                 (* Port addresses for serial ports *)
  80.    Com_Base               : ARRAY[1..MaxComPorts] OF INTEGER;
  81.  
  82.                                     (* IRQ line for each serial port   *)
  83.    Com_Irq                : ARRAY[1..MaxComPorts] OF INTEGER;
  84.  
  85.                                     (* RS 232 addresses for each port  *)
  86.    Com_RS232              : ARRAY[1..MaxComPorts] OF INTEGER;
  87.  
  88. VAR
  89.    Async_Buffer_Ptr       : Async_Ptr  (* Input buffer address  *);
  90.    Async_OBuffer_Ptr      : Async_Ptr  (* Output buffer address *);
  91.  
  92.    Async_Open_Flag        : BOOLEAN    (* true if port opened               *);
  93.    Async_Port             : INTEGER    (* current open port number (1 -- 4) *);
  94.    Async_Base             : INTEGER    (* base for current open port        *);
  95.    Async_Irq              : INTEGER    (* IRQ for current open port         *);
  96.    Async_RS232            : INTEGER    (* RS232 address for current port    *);
  97.  
  98.    Async_Buffer_Overflow  : BOOLEAN    (* True if buffer overflow has happened *);
  99.    Async_Buffer_Used      : INTEGER    (* Amount of input buffer used so far   *);
  100.    Async_MaxBufferUsed    : INTEGER    (* Maximum amount of input buffer used  *);
  101.  
  102.                                        (* Async_Buffer empty if Head = Tail    *)
  103.    Async_Buffer_Head      : INTEGER    (* Loc in Async_Buffer to put next char *);
  104.    Async_Buffer_Tail      : INTEGER    (* Loc in Async_Buffer to get next char *);
  105.    Async_Buffer_NewTail   : INTEGER    (* For updating tail value              *);
  106.  
  107.    Async_OBuffer_Overflow : BOOLEAN    (* True if buffer overflow has happened *);
  108.    Async_OBuffer_Used     : INTEGER    (* Amount of output buffer used         *);
  109.    Async_MaxOBufferUsed   : INTEGER    (* Max amount of output buffer used     *);
  110.  
  111.                                        (* Async_Buffer empty if Head = Tail    *)
  112.    Async_OBuffer_Head     : INTEGER    (* Loc in Async_Buffer to put next char *);
  113.    Async_OBuffer_Tail     : INTEGER    (* Loc in Async_Buffer to get next char *);
  114.    Async_OBuffer_NewTail  : INTEGER    (* For updating tail value              *);
  115.  
  116.    Async_Buffer_Low       : INTEGER    (* Low point in receive buffer for XON  *);
  117.    Async_Buffer_High      : INTEGER    (* High point in receive buffer for XOFF*);
  118.    Async_Buffer_High_2    : INTEGER    (* Emergency point for XOFF             *);
  119.  
  120.    Async_XOFF_Sent        : BOOLEAN    (* If XOFF sent                      *);
  121.    Async_Send_XOFF        : BOOLEAN    (* TRUE to send XOFF ASAP            *);
  122.    Async_XOFF_Received    : BOOLEAN    (* If XOFF received                  *);
  123.    Async_XOFF_Rec_Display : BOOLEAN    (* If XOFF received                  *);
  124.    Async_XON_Rec_Display  : BOOLEAN    (* If XOFF received                  *);
  125.    Async_Baud_Rate        : INTEGER    (* Current baud rate                 *);
  126.  
  127.                                     (* Save previous serial interrupt status *)
  128.    Async_Save_IAddr       : ARRAY[1..2] OF INTEGER;
  129.    Async_Do_CTS           : BOOLEAN (* TRUE to do clear-to-send checking    *);
  130.    Async_Do_DSR           : BOOLEAN (* TRUE to do data-set-ready checking   *);
  131.    Async_Do_XonXoff       : BOOLEAN (* TRUE to do XON/XOFF flow checking    *);
  132.    Async_Hard_Wired_On    : BOOLEAN (* TRUE if hard-wired connection        *);
  133.    Async_Break_Length     : INTEGER (* Length of break in 1/10 seconds      *);
  134.    Async_Line_Status      : BYTE    (* Line Status Reg at interrupt         *);
  135.    Async_Modem_Status     : BYTE    (* Modem Status Reg at interrupt        *);
  136.    Async_Line_Error_Flags : BYTE    (* Line status bits accumulated         *);
  137.    Async_Buffer_Size      : INTEGER (* Stores input buffer size             *);
  138.    Async_OBuffer_Size     : INTEGER (* Stores output buffer size            *);
  139.    Async_Uart_IER         : INTEGER (* Interrupt enable register address    *);
  140.    Async_Uart_IIR         : INTEGER (* Interrupt ID register address        *);
  141.    Async_Uart_MSR         : INTEGER (* Modem status register address        *);
  142.    Async_Uart_LSR         : INTEGER (* Line status register address         *);
  143.    Async_Output_Delay     : INTEGER (* Delay in ms when output buffer full  *);
  144.